昨天介紹了機器學習模型的偏差,今天我們繼續就同樣議題深入探討。
昨天討論了這個混淆矩陣,今天來舉一個案例說明對於有爭議的FP和FN做說明,以及討論各種評估的指標:
混淆矩陣在機器學習的分類問題可以很直觀的去理解,以電子郵件的例子來說,我們想分類寄來的信件是否為垃圾信件,以大部分的狀況來說TP與TN都是反映出電子郵件正確歸類為是垃圾信件與不是垃圾信件,而FP就會把電子郵件歸為垃圾信件,不過實際上不是,FN會把是垃圾信件的電子郵件放到一般信箱,當FP、FN這種誤報的狀況發生時,來自朋友或親人的郵件就有可能被放在垃圾信件,萬一有不小心把垃圾信件清空就得不償失,或著是一般信箱當中一直寄來惱人的垃圾信件,而有這類的狀況發生我們就把它稱之為機器學習模型的誤差。誤差是用於衡量機器學習模型的準確率,可以透過特徵工程或著是調參數來提升模型的準確率,直到你認為訓練的模型最低可以接受多少%的誤差為止。
而在機器學習當中評估誤差的指標除了偏差Bias以外還有以下這幾種
X, y = datasets.make_regression(n_features=1, random_state=42, noise=4) # 生成資料
model = LinearRegression() # 建立回歸模型
model.fit(X, y) # 將資料放進模型訓練
prediction = model.predict(X) # 進行預測
mae = metrics.mean_absolute_error(prediction, y) # 使用 MAE 評估
mse = metrics.mean_squared_error(prediction, y) # 使用 MSE 評估
r2 = metrics.r2_score(prediction, y) # 使用 r-square 評估
print("MAE: ", mae)
print("MSE: ", mse)
print("R-square: ", r2)
分類問題中,我們有時會對某一類別的準確率特別有興趣。例如瑕疵/正常樣本分類,我們希望任何瑕疵樣本都不能被漏掉。
threshold = 0.5
y_pred_binarized = np.where(y_pred>threshold, 1, 0) # 使用 np.where 函數, 將 y_pred > 0.5 的值變為 1,小於 0.5 的為 0
f1 = metrics.f1_score(y_test, y_pred_binarized) # 使用 F1-Score 評估
precision = metrics.precision_score(y_test, y_pred_binarized) # 使用 Precision 評估
recall = metrics.recall_score(y_test, y_pred_binarized) # 使用 recall 評估
print("F1-Score: ", f1)
print("Precision: ", precision)
print("Recall: ", recall)
今天先介紹到這,明天我們來討論Cloud Datalab服務。